2019湖湘杯线上 RE WriteUp
reverse
IDA分析
检测命令行输入格式为 文件名 flag.txt
flag.txt由如下脚本解得。
之后读入txt,检测输入为32位
然后进入两个处理函数
Code
sub_4113B1(xmm0_4_0, &Buf, &unk_41A4E0); // 处理1 |
处理1
将输入每两位一起进行处理,判断两位中的第一个值是否在与0-9或a-f中,如果在就减去48或87,
这里的数组将在处理2中作为验证数据。
处理2
第一位左移4位+第二位的结果加上1与dword_41A078数据进行比较。
flag脚本
Code
flag = [0x50, 0xC6, 0xF1, 0xE4, 0xE3, 0xE2, 0x9A, 0xA1,0xA7,0xde,0xda,70,171,46,255,219] |
esrever
迷宫,动态反调试没什么用
输入比较巧妙,过反调试以后动态调很复杂,但很清晰看到是控制7*7二维数组上下左右
#FFRFFF####ZZRZZZ##FF#FFFF
icekey
.NET程序,直接上dnSpy
这里加解密都已经封装好了,key是字符串iriszero的md5值
内部加密没有做任何改动,有兴趣可以对比官方实现 http://www.darkside.com.au/ice/
最后加密的密文和string b = "3ACF8D62AAA0B630C4AF43AF327CE129D46F0FEB98D9040F713BE65502A5107A";
比较
既然下面给了解密流程,那就不好意思了
观察到bytes数组存放明文,array数组存放密文,因此只需要动态调试在解密前将array内的值改为b,解密后查看bytes值即可
注意:要构造和b/2等长即32位伪flag才能申请到足够的数组长度。
修改完记得右键刷新才能在局部变量中显示
flag:5acb06231724c8c369bae711166dbe85